// JavaScript Document
/*define(
    function(require) {
		if (window.CanvasRenderingContext2D && CanvasRenderingContext2D.prototype.lineTo){
			CanvasRenderingContext2D.prototype.dashedLine = function(x,y,x2,y2,dashArray){
				if (!dashArray) dashArray=[10,5];
				var dashCount = dashArray.length;
				this.moveTo(x, y);
				var dx = (x2-x), dy = (y2-y);
				var slope = dy/dx;
				var distRemaining = Math.sqrt( dx*dx + dy*dy );
				var dashIndex=0, draw=true;
				while (distRemaining>=0.1 && dashIndex<10000){
				var dashLength = dashArray[dashIndex++%dashCount];
				if (dashLength==0) dashLength = 0.001; // Hack for Safari
				if (dashLength > distRemaining) dashLength = distRemaining;
				var xStep = Math.sqrt( dashLength*dashLength / (1 + slope*slope) );
				x += xStep
				y += slope*xStep;
				this[draw ? 'lineTo' : 'moveTo'](x,y);
				distRemaining -= dashLength;
				draw = !draw;
			}
			}
		}
        function DotLine() {
            this.type = 'dotline';
        }

        DotLine.prototype =  {
            buildPath : function(ctx, style) {
				var end = {};
				var start = {};
				var arr = [];
				//虚线画完了开始画箭头的4个线段
				//计算4个点的坐标
				start.x = style.x;
				start.y = style.y;
				end.x = style.a;
				end.y = style.b;
				ctx.strokeStyle = 'black';
				ctx.lineWidth = 1;
				ctx.lineCap = "round";
				ctx.beginPath();
				ctx.fillStyle = "#8BC54B";
				ctx.strokeStyle = 'rgb(79, 114, 39)';
				//开始画虚线。
				//当 x > 起始点的x坐标（即点击点 在起始点的右边）的时候 不需要 改变这4个坐标，但是当x < 起始点的X坐标（点击点在起始点左边的时候）需要改变这4个坐标的位置
				if(end.x > start.x) {
					ctx.dashedLine(start.x, start.y, end.x, end.y, [5,10]);
				}
				else {
					ctx.dashedLine(end.x, end.y, start.x, start.y, [5,10]);	
				}
				if(start.x != end.x && start.y != end.y) {
					console.log(1);
					arr = jisuan(end.x, end.y);
					//设定开始点。
					ctx.moveTo(arr[0],arr[1]);
					ctx.lineTo(end.x, end.y)
					ctx.lineTo(arr[2],arr[3]);
					//下面这个计算是用来在箭头与虚线的交叉点。直角三角形计算原理。。
					ctx.lineTo(end.x-parseInt(6*Math.cos(arr[4] * Math.PI / 180)), end.y-parseInt(6*Math.sin(arr[4]*Math.PI/180)));
					ctx.lineTo(arr[0],arr[1]);
				}
				console.log("jisuan")
				ctx.closePath();
				ctx.stroke();
				ctx.fill();
				//该函数用来根据鼠标点击点 计算箭头4个点的坐标，在JS中cos和SIN都是计算的弧度，所以需要转换。至于计算方法属于属性范畴这里不累述。
				//对于该函数，如果需要修改箭头的大小 只需修改 45: 箭头两边的长度； 35:箭头与中间虚线的角度即可。
				function jisuan(x, y) {
					console.log("jisuan")
					var angle = parseFloat(Math.atan2(y - start.y, x - start.x)/Math.PI*180);
					var arr = [];
					arr[0] = x - parseFloat(10 * Math.cos(Math.PI/180*(angle - 20)));
					arr[1] = y - parseFloat(10 * Math.sin(Math.PI/180*(angle - 20)));
					arr[2] = x - parseFloat(10 * Math.cos(Math.PI/180*(angle + 20)));
					arr[3] = y - parseFloat(10 * Math.sin(Math.PI/180*(angle + 20)));
					arr[4] = angle;
					return arr;	
				}
				return;
            },
            getRect : function(style) {
                var lineWidth = style.lineWidth || 1;
				console.log("getRext")
                return {
                    x : Math.min(style.x, style.a) - lineWidth,
                    y : Math.min(style.y, style.b) - lineWidth,
                    width : Math.abs(style.x - style.a)
                            + lineWidth,
                    height : Math.abs(style.y - style.b)
                             + lineWidth
                };
            },
			drift : function(e, dx, dy) {
				e.style.x += dx;
				e.style.y += dy;
			},
			isCover : function(e, x, y) {
				if((e.style.y - e.style.b)/(e.style.x - e.style.a) == (y - e.style.y)/(x - e.style.x)) {
					console.log(1)
					return true;	
				}	
				else {
					return false;	
				}
			}
        };

        var base = require('./base');
        base.derive(DotLine);
        
        var shape = require('../shape');
        shape.define('dotline', new DotLine());
        return DotLine;
    }
);*/

define(
    function(require) {
        function DotLine() {
            this.type = 'dotline';
            this.brushTypeOnly = 'stroke';  //线条只能描边，填充后果自负
            this.textPosition = 'end';
        }

        DotLine.prototype =  {
            /**
             * 创建线条路径
             * @param {Context2D} ctx Canvas 2D上下文
             * @param {Object} style 样式
             */
            buildPath : function(ctx, style) {
                if (!style.lineType || style.lineType == 'solid') {
                    //默认为实线
                    ctx.moveTo(style.xStart, style.yStart);
                    ctx.lineTo(style.xEnd, style.yEnd);
                }
                else if (style.lineType == 'dashed'
                        || style.lineType == 'dotted'
                ) {
                    //画虚线的方法  by loutongbing@baidu.com
                    var lineWidth = style.lineWidth || 1;
                    var dashPattern = [
                        lineWidth * (style.lineType == 'dashed' ? 6 : 1),
                        lineWidth * 4
                    ];
                    var fromX = style.xStart;
                    var toX = style.xEnd;
                    var fromY = style.yStart;
                    var toY = style.yEnd;
                    var dx = toX - fromX;
                    var dy = toY - fromY;
                    var angle = Math.atan2(dy, dx);
                    var x = fromX;
                    var y = fromY;
                    var idx = 0;
                    var draw = true;
                    var dashLength;
                    var nx;
                    var ny;

                    ctx.moveTo(fromX, fromY);
                    while (!((dx < 0 ? x <= toX : x >= toX)
                              && (dy < 0 ? y <= toY : y >= toY))
                    ) {
                        dashLength = dashPattern[idx++ % dashPattern.length];
                        nx = x + (Math.cos(angle) * dashLength);
                        x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);
                        ny = y + (Math.sin(angle) * dashLength);
                        y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);
                        if (draw) {
                            ctx.lineTo(x, y);
							console.log(1)
                        }
                        else {
							console.log(2);
                            ctx.moveTo(x, y);
                        }
                        draw = !draw;
                    }
                }
            },

            /**
             * 返回矩形区域，用于局部刷新和文字定位
             * @param {Object} style
             */
            getRect : function(style) {
                var lineWidth = style.lineWidth || 1;
                return {
                    x : Math.min(style.xStart, style.xEnd) - lineWidth,
                    y : Math.min(style.yStart, style.yEnd) - lineWidth,
                    width : Math.abs(style.xStart - style.xEnd)
                            + lineWidth,
                    height : Math.abs(style.yStart - style.yEnd)
                             + lineWidth
                };
            }
        };

		function test() {
					if(start.x != end.x && start.y != end.y) {
					console.log(1);
					arr = jisuan(end.x, end.y);
					//设定开始点。
					ctx.moveTo(arr[0],arr[1]);
					ctx.lineTo(end.x, end.y)
					ctx.lineTo(arr[2],arr[3]);
					//下面这个计算是用来在箭头与虚线的交叉点。直角三角形计算原理。。
					ctx.lineTo(end.x-parseInt(6*Math.cos(arr[4] * Math.PI / 180)), end.y-parseInt(6*Math.sin(arr[4]*Math.PI/180)));
					ctx.lineTo(arr[0],arr[1]);
				}
				console.log("jisuan")
				ctx.closePath();
				ctx.stroke();
				ctx.fill();
				//该函数用来根据鼠标点击点 计算箭头4个点的坐标，在JS中cos和SIN都是计算的弧度，所以需要转换。至于计算方法属于属性范畴这里不累述。
				//对于该函数，如果需要修改箭头的大小 只需修改 45: 箭头两边的长度； 35:箭头与中间虚线的角度即可。
				function jisuan(x, y) {
					console.log("jisuan")
					var angle = parseFloat(Math.atan2(y - start.y, x - start.x)/Math.PI*180);
					var arr = [];
					arr[0] = x - parseFloat(10 * Math.cos(Math.PI/180*(angle - 20)));
					arr[1] = y - parseFloat(10 * Math.sin(Math.PI/180*(angle - 20)));
					arr[2] = x - parseFloat(10 * Math.cos(Math.PI/180*(angle + 20)));
					arr[3] = y - parseFloat(10 * Math.sin(Math.PI/180*(angle + 20)));
					arr[4] = angle;
					return arr;	
				}	
		}
        var base = require('./base');
        base.derive(DotLine);
        
        var shape = require('../shape');
        shape.define('dotline', new DotLine());

        return DotLine;
    }
);